home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swags_z.zip / TEXTFILE.SWG / 0020_Seeking a text file.pas < prev    next >
Pascal/Delphi Source File  |  1993-08-27  |  2KB  |  59 lines

  1. {
  2. MARCO MILTENBURG
  3.  
  4. > One cannot seek in a Text File...
  5.  
  6. Sure you can... For Dos, TextFiles are Really the same things as Typed
  7. Files, so why don't ask Dos ;-) ?  Try this one. F is a TextFile and n is the
  8. File-offset.
  9. }
  10.  
  11. Procedure tSeek(Var f : Text; n : LongInt); Assembler;
  12. Asm
  13.   push  DS
  14.   push  BP
  15.  
  16.   lds   SI, f
  17.   lodsw                            { handle }
  18.   mov   BX, AX
  19.  
  20.   mov   CX, Word ptr [BP+8]
  21.   mov   DX, Word ptr [BP+6]
  22.  
  23.   mov   AX, 4200h              {AL = 2, AH = 42}
  24.   int   21h
  25.  
  26.   les   DI, f
  27.   mov   AX, DI
  28.   add   AX, 8
  29.   mov   DI, AX
  30.  
  31.   lodsw                            { mode }
  32.   lodsw                            { bufsize }
  33.   mov   CX, AX                      { CX = number of Bytes to read }
  34.   lodsw                            { private }
  35.   lodsw                            { bufpos  }
  36.   lodsw                            { bufend  }
  37.   lodsw                            { offset of Pointer to Textbuf }
  38.   mov   DX, AX                      { DX = offset of Textbuf }
  39.   lodsw
  40.   mov   DS, AX                      { DS = segment of Textbuf }
  41.   mov   AH, 3Fh
  42.   int   21h
  43.   push  AX                         { Save AX on stack }
  44.  
  45.   les   DI, f                       { ES:DI points to f }
  46.   mov   AX, DI                      { Move Pointer to position 8 }
  47.   add   AX, 8
  48.   mov   DI, AX
  49.  
  50.   mov   AX, 0                       { Bufpos = 0 }
  51.   stosw
  52.   pop   AX                         { Bufend = number of Bytes read }
  53.   stosw
  54.  
  55.   pop   BP
  56.   pop   DS
  57. end; { tSeek }
  58.  
  59.